spacer image
spacer image

Technote 10003

sbitÉtÉHÉìÉgDžǬǢǃ

Written by : Takayuki Mizuno (JapanDTS) Å@Å@Å@Å@Å@Å@Å@Å@Å@Å@Å@Å@April 1994

ñ{ÉeÉNÉjÉJÉãÉmÅ[ÉgÇÕÅAQuickDraw GXÇ…ÇÊÇËì±ì¸Ç≥ÇÍÇΩêVǵǢTrueTypeÉXÉPÅ[ÉâÅ[Ç…ÇÊǡǃÉTÉ|Å[ÉgÇ≥ÇÍÇÈsbitÉtÉHÉìÉgÉtÉHÅ[É}ÉbÉgDžǬǢǃê‡ñæÇ∑ÇÈLJÇÃÇ≈Ç∑ÅB

ŰÉrÉbÉgÉ}ÉbÉvÅEÉçÉPÅ[ÉVÉáÉìÅEÉeÅ[ÉuÉã
ÉrÉbÉgÉ}ÉbÉvÅEÉçÉPÅ[ÉVÉáÉìÅEÉeÅ[ÉuÉãÅiÉ^ÉOÉlÅ[ÉÄÅF'bloc'ÅjÇ…ÇÕÅAéwíËÇ≥ÇÍÇΩÉ|ÉCÉìÉgÉTÉCÉYÇÃÉrÉbÉgÉ}ÉbÉvÇ™ë∂ç›Ç∑ÇÈÇÃǩǫǧǩÅAǪǵǃÉrÉbÉgÉ}ÉbÉvÇ™ë∂ç›Ç∑ÇÈèÍçáÇ…ÇÕÅAå„ÇŸÇ«ê‡ñæÇ∑ÇÈ'bdat'ÉeÅ[ÉuÉãÇÃǫDZDžǪÇÃÉfÅ[É^Ç™äiî[Ç≥ÇÍǃǢÇÈÇÃÇ©ÅAǪÇÍÇÁÇ…ä÷Ç∑ÇÈÇ≥NjǥNjǻèÓïÒÇ™äiî[Ç≥ÇÍǃǢNjÇ∑ÅB'bloc'ÇΔ'bdat'ÉeÅ[ÉuÉãÇÕÅAÇ≥NjǥNjǻÉtÉHÅ[É}ÉbÉgÇÉTÉ|Å[ÉgǵǃǮÇËÅAÉvÉçÉ|Å[ÉVÉáÉiÉãÇ‚ÉÇÉmÉXÉyÅ[ÉXÇÃÉrÉbÉgÉ}ÉbÉvÉtÉHÉìÉgÇÕÇ‡ÇøÇÎÇÒÅAà≥èkÇ≥ÇÍÇΩÉrÉbÉgÉ}ÉbÉvÉfÅ[É^LJäiî[Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÇ‹ÇΩÅA1ǬÇÃÉtÉHÉìÉgì‡ÇÃÇ≥NjǥNjǻÉOÉäÉtÉåÉìÉWÇ…ëŒÇµÅAàŸÇ»ÇÈÉtÉHÅ[É}ÉbÉgÇégǡǃÉrÉbÉgÉ}ÉbÉvÉfÅ[É^Çäiî[Ç∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅB

ÅEÉrÉbÉgÉ}ÉbÉvÅEÉçÉPÅ[ÉVÉáÉìÅEÉeÅ[ÉuÉãÅEÉwÉbÉ_
ÉrÉbÉgÉ}ÉbÉvÅEÉçÉPÅ[ÉVÉáÉìÅEÉeÅ[ÉuÉãÅEÉwÉbÉ_ÇÃÉtÉHÅ[É}ÉbÉgÇÕâ∫ãLÇÃÇÊǧDžǻǡǃǢNjÇ∑ÅB

Type Name ê‡ñæ
fixed version ÉrÉbÉgÉ}ÉbÉvÅEÉçÉPÅ[ÉVÉáÉìÅEÉeÅ[ÉuÉãÇÃÉoÅ[ÉWÉáÉìÉiÉìÉoÅ[
Åièâä˙ÉoÅ[ÉWÉáÉìÇÕ0x00020000Åj
uint32 numSizes DZÇÃÉeÅ[ÉuÉãíÜÇÃÉrÉbÉgÉ}ÉbÉvÅEÉTÉCÉYÅEÉeÅ[ÉuÉãÇÃêî


ÅEÉrÉbÉgÉ}ÉbÉvÅEÉTÉCÉYÅEÉeÅ[ÉuÉã
ÉrÉbÉgÉ}ÉbÉvÅEÉçÉPÅ[ÉVÉáÉìÅEÉeÅ[ÉuÉãÅEÉwÉbÉ_Ç…ë±Ç¢ÇƒÅAÉrÉbÉgÉ}ÉbÉvÅEÉTÉCÉYÅEÉeÅ[ÉuÉãÇÃîzóÒÇ™ë±Ç´Ç‹Ç∑ÅBDZÇÃÉeÅ[ÉuÉãÇ…ÇÕÅAäeÉ|ÉCÉìÉgÉTÉCÉYÇÃÉrÉbÉgÉ}ÉbÉvÉtÉHÉìÉgÇ…ã§í Ç∑ÇÈïÔäáìIÇ»èÓïÒÇ™äiî[Ç≥ÇÍǃǮÇËÅAÉtÉHÅ[É}ÉbÉgÇÕâ∫ãLÇÃÇÊǧDžǻǡǃǢNjÇ∑ÅBäÓñ{ìIÇ…ÅAǪÇÃÉtÉHÉìÉgǙǫÇÃÉ|ÉCÉìÉgÉTÉCÉYÇÃÉrÉbÉgÉ}ÉbÉvÉfÅ[É^ÇéùǬǩDžâûÇ∂ǃÅADZÇÃÉeÅ[ÉuÉãÇÇ¢Ç≠ǬéùǬǩǙåàÇ‹ÇËÇ‹Ç∑ÅB

Type Name ê‡ñæ
uint32 indexSubTableArrayOffset ÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉãîzóÒÇ÷ÇÃÅi'bloc'ÇÃêÊì™Ç©ÇÁÇÃÅjÉIÉtÉZÉbÉg
uint32 indexTableSize ÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉãÇÃÉTÉCÉYÇ…ÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉãîzóÒÇÃÉTÉCÉYÇâ¡Ç¶ÇΩÉoÉCÉgí∑
uint32 numberOfIndexSubTables ÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉãÇÃêî
uint32 colorRef 0Ç…ÉZÉbÉgÅiåªç›ÇÕÅAñ≥éãÇ≥ÇÍÇ‹Ç∑Åj
sbitLineMetrics hori â°èëÇ´ópÇÃÉÅÉgÉäÉNÉX
sbitLineMetrics vert ècèëÇ´ópÇÃÉÅÉgÉäÉNÉX
uint16 startGlyphIndex DZÇÃÉTÉCÉYÇÃç≈LJè¨Ç≥Ç»ÉOÉäÉtÅEÉCÉìÉfÉbÉNÉX
uint16 endGlyphIndex DZÇÃÉTÉCÉYÇÃç≈LJëÂÇ´Ç»ÉOÉäÉtÅEÉCÉìÉfÉbÉNÉX
uint8 ppemX â°ï˚å¸ÇÃÉ|ÉCÉìÉgÉTÉCÉY
uint8 ppemY ècï˚å¸ÇÃÉ|ÉCÉìÉgÉTÉCÉY
uint8 bitDepth ÉtÉHÉìÉgÉXÉgÉâÉCÉNÇÃÉrÉbÉgÅEÉfÉvÉX
unit8 flags ÉtÉâÉO


colorRefÇÕÅAåªç›ÇÃTrueTypeÉXÉPÅ[ÉâÅ[Ç≈ÇÕÉTÉ|Å[ÉgÇ≥ÇÍǃǢNjÇπÇÒÇ™ÅAè´óàÇÃägí£ÇÃÇΩÇflÇ…ë∂ç›ÇµÇ‹Ç∑ÅBÇΩÇæÇµÅANewtonǻǫÇÃëºÇÃÉvÉâÉbÉgÉtÉHÅ[ÉÄÇ≈ÇÕÇ∑Ç≈Ç…égópÇ≥ÇÍǃǢNjÇ∑ÅB
ÉtÉâÉOÇÕÅAÉXÉÇÅ[ÉãÉÅÉgÉäÉNÉXÉ^ÉCÉvÇÃÉÅÉgÉäÉNÉXèÓïÒÇégópǵÇΩèÍçáÅAǪÇÍÇ™ècèëÇ´ópÇÃÉÅÉgÉäÉNÉXèÓïÒÇ»ÇÃÇ©ÅAècèëÇ´ópÇÃÉÅÉgÉäÉNÉXèÓïÒÇ»ÇÃÇ©ÇéwíËǵNjÇ∑ÅB

Type Name ê‡ñæ
0x01 flgHorizontal smallGlyphMetricsÇÕâ°èëÇ´óp
0x02 flgVertical smallGlyphMetricsÇÕècèëÇ´óp


ÉtÉHÉìÉgÇ…ä÷Ç∑ÇÈÉOÉçÅ[ÉoÉãÉÅÉgÉäÉNÉXèÓïÒÇÕÅAsbitLineMetricsÉ^ÉCÉvÇÃÉåÉRÅ[ÉhÇ…äiî[Ç≥ÇÍÇ‹Ç∑ÅBǪǵǃÅAÉrÉbÉgÉ}ÉbÉvÉTÉCÉYÉeÅ[ÉuÉãÇ…ÇÕÅAâ°èëÇ´ópÇΔècèëÇ´ópÇÃ2ǬÇÃÉÅÉgÉäÉNÉXèÓïÒÇ™äiî[Ç≥ÇÍÇ‹Ç∑ÅBsbitLineMetricsÇÃÉtÉHÅ[É}ÉbÉgÇÕâ∫ãLÇÃÇÊǧDžǻǡǃǢNjÇ∑ÅB

Type Name ê‡ñæ
int8 ascender ÉAÉZÉìÉ_
int8 descender ÉfÉBÉZÉìÉ_
uint8 widthMax ÉOÉäÉtÇÃç≈ëÂÉsÉNÉZÉãïù
int8 caretSlopeNumerator ÉLÉÉÉåÉbÉgÇÃåXÇ´ÇÃçÇÇ≥ÅiÉCÉ^ÉäÉbÉNëÃÇ≈ǻǢÉtÉHÉìÉgÇ≈ÇÕäÓñ{ìIÇ…1Åj
int8 caretSlopeDenominator ÉLÉÉÉåÉbÉgÇÃåXÇ´ÇÃïùÅiÉCÉ^ÉäÉbÉNëÃÇ≈ǻǢÉtÉHÉìÉgÇ≈ÇÕäÓñ{ìIÇ…0Åj
int8 caretOffset ìKǵÇΩà íuÇ…ÉLÉÉÉåÉbÉgÇà⁄ìÆÇ≥ÇπÇΩÇflÇÃÉIÉtÉZÉbÉgíl
int8 minOriginSB Min(horiBearingX) {Min(vertBearingY)}
int8 minAdvanceSB Min(horiAdvance-(horiBearingX+width))
{Min(vertAdvance-(vertBearingY+height))}
int8 maxBeforeBL Max(horiBearingY) {Max(vertBearingY)}
int8 minAfterBL Min(horiBearingY-height)
{Min(vertBearingX-width)}
int16 pad ÉçÉìÉOÉèÅ[Éhã´äEÇÃÇΩÇflÇÃÉpÉfÉBÉìÉO

*Åo ÅpÇÕècèëÇ´ópÇÃíl

minOriginSBÅAminAdvanceSBÅAmaxBeforeBLÅAminAfterBLÇÕÅANewtonǻǫÇÃëºÇÃÉvÉâÉbÉgÉtÉHÅ[ÉÄÇ≈ÇÕégópÇ≥ÇÍÇ‹Ç∑Ç™ÅAQuickDraw GXÇ≈ÇÕåªç›égópÇ≥ÇÍǃǢNjÇπÇÒÅBäeílÇÃà”ñ°Ç…ǬǢǃÇÕÅAê}2ÇéQèΔǵǃâ∫Ç≥Ç¢ÅB

ÅEÉrÉbÉgÉ}ÉbÉvÅEÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉã
ÉrÉbÉgÉ}ÉbÉvÅEÉTÉCÉYÅEÉeÅ[ÉuÉãÇÃîzóÒÇÃéüÇ…ÅAÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉãîzóÒÇ™ë±Ç´Ç‹Ç∑ÅBÉCÉìÉfÉbÉNÉXÇ÷ÇÃÉIÉtÉZÉbÉgÇÕÉrÉbÉgÉ}ÉbÉvÅEÉTÉCÉYÅEÉeÅ[ÉuÉãÇÃindexSubTableArrayOffssetÇ…äiî[Ç≥ÇÍǃǢNjÇ∑ÅBç≈èâÇÃÉCÉìÉfÉbÉNÉXÉTÉuÉeÅ[ÉuÉãîzóÒÇÕÅAç≈å„ÇÃbitmapSizeTableÇ…ë±Ç¢Çƒë∂ç›ÇµÇ‹Ç∑ÅBǪǵǃÅADZÇÃîzóÒÇÃéüÇ…ÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉãÇ™ë±Ç´Ç‹Ç∑ÅBÇ‹ÇΩÅA2ǬÇflà»ç~ÇÃÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉãîzóÒÇΔǪÇÃÉCÉìÉfÉbÉNÅEÉTÉuÉeÅ[ÉuÉãÇÕÅAëOÇÃÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉãÇÃéüÇ…ë±Ç´Ç‹Ç∑ÅBè⁄ǵÇ≠ÇÕÅAê}3ÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅBäeÉCÉìÉfÉbÉNÅEÉTÉuÉeÅ[ÉuÉãÇÕÅAÉçÉìÉOÉèÅ[Éhã´äEÇ≈énÇ‹ÇÁÇ»Ç≠ǃÇÕÇ»ÇËÇ‹ÇπÇÒÅBÅiÉtÉHÅ[É}ÉbÉg3ÇégópÇ∑ÇÈèÍçáÇ…ÇÕÅAuint16ÇÉpÉfÉBÉìÉOÇÃÇΩÇflÇ…offsetArrayÇ…í«â¡Ç∑ÇÈïKóvǙdžÇÈǩLJǵÇÍÇ‹ÇπÇÒÅj

Type Name ê‡ñæ
uint16 firstGlyphIndex DZÇÃÉåÉìÉWÇÃç≈èâÇÃÉOÉäÉtÅEÉCÉìÉfÉbÉNÉX
uint16 lastGlyphIndex DZÇÃÉåÉìÉWÇÃç≈å„ÇÃÉOÉäÉtÅEÉCÉìÉfÉbÉNÉX
uint32 additionalOffssetToIndexSubtable ÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉãÇ÷ÇÃÉIÉtÉZÉbÉg 'bloc'ÇÃêÊì™Ç©ÇÁÇÃÉIÉtÉZÉbÉgÇìæÇÈÇΩÇflÇ…ÇÕÅADZÇÃÉIÉtÉZÉbÉgílÇindexSubTableArrayOFfsetÇ…â¡Ç¶ÇÈ


ǪǵǃÅAç≈èIìIÇ…ÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉãÇ…ìûíBǵNjÇ∑ÅBåªç›ÉvÉçÉ|Å[ÉVÉáÉiÉãÉtÉHÉìÉgÇÃÇΩÇflÇ…2ǬÇÃÉtÉHÅ[É}ÉbÉgÇ™ë∂ç›ÇµÅAÅAÉÇÉmÉXÉyÅ[ÉXÉtÉHÉìÉgÇÃÇΩÇflÇ…1ǬÇÃÉtÉHÅ[É}ÉbÉgÇ™ë∂ç›ÇµÇ‹Ç∑ÅB

'bdat'ÇÃÉtÉHÅ[É}ÉbÉgÇÕÅADZÇÃÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉãÇÃÉtÉHÅ[É}ÉbÉgÇ…ä÷åWÇ»Ç≠ìKìñÇ»ÉtÉHÅ[É}ÉbÉgÇégǧDZÇΔÇ™èoóàÇ‹Ç∑ÅBäeÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉãÇ…ÇÊÇËÅAǪÇÃÉtÉHÉìÉgÇÃäeÉOÉäÉtÇÃé¿ç€ÇÃÉrÉbÉgÉ}ÉbÉvÉfÅ[É^Ç™'bdat'ÇÃǫDZDžäiî[Ç≥ÇÍǃǢÇÈǩǙÇÌÇ©ÇËÇ‹Ç∑ÅBÇ‹ÇΩÅAäeÉOÉäÉtÇÃÉfÅ[É^ÉTÉCÉYÇÕÅAoffsetArray[glyphIndex+1]-offsetArray[glyphIndex]ÇåvéZÇ∑ÇÈDZÇΔÇ…ÇÊÇËãÅÇflÇÈDZÇΔÇ™èoóàÇ‹Ç∑ÅBÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉãÇ…ÇÕÅA3ǬÇÃÉtÉHÅ[É}ÉbÉgÇ™ë∂ç›ÇµÇ‹Ç∑ÅBÉtÉHÅ[É}ÉbÉg1ÇÕÉvÉçÉ|Å[ÉVÉáÉiÉãÉtÉHÉìÉgópÅAÉtÉHÅ[É}ÉbÉg2ÇÕÅAÉÇÉmÉXÉyÅ[ÉXÉtÉHÉìÉgópÅAÉtÉHÅ[É}ÉbÉg3ÇÕÅAÉvÉçÉ|Å[ÉVÉáÉiÉãÉtÉHÉìÉgópÇ≈Ç∑ÅBÉtÉHÅ[É}ÉbÉg3ÇÕÅAuint32Ç≈ÇÕÇ»Ç≠uint16ÇÃîzóÒÇégópÇ∑ÇÈà≥èkÇ≥ÇÍÇΩÉtÉHÅ[É}ÉbÉg1Ç≈Ç∑ÅB
ǪÇÍǺÇÍÇÃÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉãÇÕÉCÉìÉfÉbÉNÉXÅEÉTÉuÉwÉbÉ_ÇéùǡǃǮÇËÅAǪÇÃÉtÉHÅ[É}ÉbÉgÇÕâ∫ãLÇÃí ÇËÇ≈Ç∑ÅB

Type Name ê‡ñæ
uint16 indexFormat ÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉãÇÃÉtÉHÅ[É}ÉbÉgÇÃéÌófi
uint16 imageFormat ÉrÉbÉgÉ}ÉbÉvÉfÅ[É^ÇÃÉtÉHÅ[É}ÉbÉgÇÃéÌófi
uint32 imageDataOffset ÉrÉbÉgÉ}ÉbÉvÉfÅ[É^Ç™äiî[Ç≥ÇÍǃǢÇÈèÍèäÇé¶Ç∑Åi'bdat'ÉeÅ[ÉuÉãÇÃêÊì™Ç©ÇÁÇÃÅjÉIÉtÉZÉbÉg


ÉtÉHÅ[É}ÉbÉg1ÇΔÉtÉHÅ[É}ÉbÉg3Ç≈ÇÕÅAǪÇÃÉfÅ[É^ÇÕòAë±ìIÇ…äiî[Ç≥ÇÍǃǢÇÈÇÃÇ≈ÅAäeÉOÉäÉtÇÃÉfÅ[É^ÇÃÉTÉCÉYÇÕ1Ǭå„ÇÎÇÃÉOÉäÉtÇÃÉIÉtÉZÉbÉgÇ©ÇÁåªç›ÇÃÉOÉäÉtÇÃÉIÉtÉZÉbÉgÇç∑ǵà¯Ç≠DZÇΔÇ…ÇÊÇËãÅÇflÇÈDZÇΔÇ™èoóàÇ‹Ç∑ÅB

Type Name ê‡ñæ
indexSubHeader header ÉCÉìÉfÉbÉNÉXÅEÉTÉuÉwÉbÉ_
uint32 offsetArray[] offsetArray[glyphIndex] + imageDataOffset = startOfBitDataForGlyph


ÉÇÉmÉXÉyÅ[ÉXÉtÉHÉìÉgÇ…ëŒÇµÇƒÇÕÅAÉtÉHÅ[É}ÉbÉg2ÇégópǵNjÇ∑ÅBÉÅÉgÉäÉNÉXèÓïÒÇÕÅA'bdat'Ç≈ÇÕÇ»Ç≠ÅADZÇÃÉCÉìÉfÉbÉNÉXÅEÉTÉuÉeÅ[ÉuÉãÇ…äiî[Ç≥ÇÍǃÅAÉrÉbÉgÉ}ÉbÉvÉfÅ[É^ÇÃǛǙ'bdat'Ç…äiî[Ç≥ÇÍÇ‹Ç∑ÅBÇ‹ÇΩÅAǪÇÃÉfÅ[É^ÇÕÅAÉoÉCÉgÉAÉâÉCÉìÅAÉrÉbÉgÉAÉâÉCÉìÅAà≥èkÇ≥ÇÍÇΩÉfÅ[É^ìôÇ≥NjǥNjǻÉtÉHÅ[É}ÉbÉgÇéÊÇÈDZÇΔÇ™èoóàÇ‹Ç∑ÅBÉrÉbÉgÉ}ÉbÉvÉfÅ[É^ÇÃÉTÉCÉYÇÕÅAimageSizeDždžÇËÇ‹Ç∑ÅBimageDataOffsetÇÕÅADZÇÃÉåÉìÉWÇÃÉOÉäÉtÇÃç≈èâÇÃ'bdat'ÇÃÉIÉtÉZÉbÉgÇ≈Ç∑ÅBécÇËÇÃÉOÉäÉtÇ…ä÷ǵǃÇÕÅAimageaSizeÇΔ(theDesiredGlyphIndex-firstGlyphInThisIndex)ÇÃílÇä|ÇØÇƒÅAǪÇÃåãâ ÇÉCÉìÉfÉbÉNÉXÅEÉTÉuÉwÉbÉ_ÇÃimageDataOffsetÇ…â¡Ç¶ÇÈDZÇΔÇ…ÇÊÇËÇÊÇËä»íPÇ…ãÅÇflÇÈDZÇΔÇ™èoóàÇ‹Ç∑ÅBÉtÉHÅ[É}ÉbÉg2ÇÃÉÅÉgÉäÉNÉXèÓïÒÇÕÅAbugGlyphMetricsÉ^ÉCÉvÇ≈äiî[Ç≥ÇÍÇ‹Ç∑ÅB

Type Name ê‡ñæ
indexSubHeader header ÉCÉìÉfÉbÉNÉXÅEÉTÉuÉwÉbÉ_
uint32 imageSize Ç∑Ç◊ǃÇÃÉOÉäÉtÇ™ìØÇ∂ÉTÉCÉYÇéùÇøÇ‹Ç∑
bigGlyphMetrics bigMetrics Ç∑Ç◊ǃÇÃÉOÉäÉtÇ™ìØÇ∂ÉÅÉgÉäÉNÉXÇéùÇøÇ‹Ç∑

ŰÉrÉbÉgÉ}ÉbÉvÅEÉfÅ[É^ÅEÉeÅ[ÉuÉã
ÉrÉbÉgÉ}ÉbÉvÅEÉfÅ[É^ÅEÉeÅ[ÉuÉãÅiÉ^ÉOÉlÅ[ÉÄÅF'bdat'ÅjÇÕîÒèÌÇ…ÉVÉìÉvÉãÇ»ç\ë¢Ç≈ÅAêÊì™Ç…ÉoÅ[ÉWÉáÉìÉiÉìÉoÅ[ǙdžÇËÅAǪÇÍÇ…ë±Ç¢ÇƒÉtÉHÉìÉgÇ…ä÷Ç∑ÇÈÉfÅ[É^Ç™ë∂ç›ÇµÇ‹Ç∑ÅBÉfÅ[É^ÇÕÇ≥NjǥNjǻÉtÉHÅ[É}ÉbÉgÇéÊÇÈDZÇΔÇ™Ç≈Ç´ÅAÉtÉHÉìÉgÇÃÉCÉÅÅ[ÉWÉfÅ[É^ÇÃÇ›ÇÃÉtÉHÅ[É}ÉbÉgÇ‚ÅAÉÅÉgÉäÉNÉXèÓïÒÇéùǬÉtÉHÅ[É}ÉbÉgǻǫǙë∂ç›ÇµÇ‹Ç∑ÅB

ÅEÉrÉbÉgÉ}ÉbÉvÅEÉfÅ[É^ÅEÉeÅ[ÉuÉãÅEÉwÉbÉ_ÇÃç\ë¢ÇÕà»â∫ÇÃÇΔÇ®ÇËÇ≈Ç∑ÅB

Type Name ê‡ñæ
fixed32 version ÉrÉbÉgÉ}ÉbÉvÅEÉçÉPÅ[ÉVÉáÉìÅEÉeÅ[ÉuÉãÇÃÉoÅ[ÉWÉáÉìÉiÉìÉoÅ[Åièâä˙ÉoÅ[ÉWÉáÉìÇÕ0x00020000Åj


ÅE6ǬÇÃÉtÉHÅ[É}ÉbÉgÇ™QuickDraw GXÇ…ÇÊǡǃÉTÉ|Å[ÉgÇ≥ÇÍǃǢNjÇ∑ÅBÇ¢Ç≠ǬǩÇÃÉtÉHÅ[É}ÉbÉgÇÕÅAÉvÉçÉ|Å[ÉVÉáÉiÉãÉtÉHÉìÉgópÇ≈ÅAëºÇÃLJÇÃÇÕÉÇÉmÉXÉyÅ[ÉXÉtÉHÉìÉgópÇ≈Ç∑ÅBÇ‹ÇΩÅA1ǬÇÃÉtÉHÉìÉgì‡Ç≈ÅAàŸÇ»ÇÈÉtÉHÅ[É}ÉbÉgÇégópÇ∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅBó·Ç¶ÇŒÅAì˙ñ{åÍÉtÉHÉìÉgÇ≈ÇÕÅAÉçÅ[É}Éìïîï™ÇproportionalByteFormat6Ç≈íËã`ǵǃÅAì˙ñ{åÍïîï™ÇmonoFormat5Ç≈íËã`Ç∑ÇÈéñÇ™èoóàÇ‹Ç∑ÅB

'bdat'ÇÃ6ǬÇÃÉtÉHÅ[É}ÉbÉgÇÕà»â∫ÇÃí ÇËÇ≈Ç∑ÅB

Type Name ê‡ñæ
1 proportionalFormat1 ÉXÉÇÅ[ÉãÉÅÉgÉäÉNÉXÇΔÉoÉCÉgÉAÉâÉCÉìÇÃÉrÉbÉgÉ}ÉbÉvÉCÉÅÅ[ÉW
2 proportionalFormat2 ÉXÉÇÅ[ÉãÉÅÉgÉäÉNÉXÇΔÉrÉbÉgÉAÉâÉCÉìÇÃÉrÉbÉgÉ}ÉbÉvÉCÉÅÅ[ÉW
4 monoCompressedFormat4 à≥èkÇ≥ÇÍÇΩÉCÉÅÅ[ÉWÇæÇØÅAÉÅÉgÉäÉNÉXÇÕ'bloc' Ç…äiî[
5 monoFormat5 ÉrÉbÉgÉAÉâÉCÉìÇÃÉCÉÅÅ[ÉWÇæÇØÅAÉÅÉgÉäÉNÉXÇÕ'bloc' Ç…äiî[
6 proportionalByteFormat6 ÉrÉbÉOÉÅÉgÉäÉNÉXÇΔÉoÉCÉgÉAÉâÉCÉìÇÃÉrÉbÉgÉ}ÉbÉvÉCÉÅÅ[ÉW
6 proportionalByteFormat7 ÉrÉbÉOÉÅÉgÉäÉNÉXÇΔÉrÉbÉgÉAÉâÉCÉìÇÃÉrÉbÉgÉ}ÉbÉvÉCÉÅÅ[ÉW


ÉtÉHÅ[É}ÉbÉg1ÇΔÉtÉHÅ[É}ÉbÉg2ÇÕÅAǪÇÃÉrÉbÉgÉ}ÉbÉvÉCÉÅÅ[ÉWÇÃÉAÉâÉCÉìÉÅÉìÉgÇ™àŸÇ»ÇÈÇæÇØÇ≈ÅAóºï˚ÇΔLJÉXÉÇÅ[ÉãÉÅÉgÉäÉNÉXÇÃÉÅÉgÉäÉNÉXèÓïÒÇéùÇøÇ‹Ç∑ÅBÉtÉHÅ[É}ÉbÉg4ÇÕÅAÉÇÉfÉBÉtÉ@ÉCÉhÅEÉzÉtÉ}ÉìÅEÉGÉìÉRÅ[ÉfÉBÉìÉOÇ…ÇÊÇËà≥èkÇ≥ÇÍÇΩÉrÉbÉgÉ}ÉbÉvÉCÉÅÅ[ÉWÇéùǬÉtÉHÅ[É}ÉbÉgÇ≈Ç∑ÅBÉtÉHÅ[É}ÉbÉg5ÇÕÅAÉoÉCÉgÉèÅ[Éhã´äEÇ…Ç»ÇÈÇÊǧDžÉpÉfÉBÉìÉOÇ≥ÇÍÇΩÉrÉbÉgÉAÉâÉCÉìÇÃÉrÉbÉgÉ}ÉbÉvÉCÉÅÅ[ÉWÇéùǬÉtÉHÅ[É}ÉbÉgÇ≈ÅAÉÅÉgÉäÉNÉXÇ…ä÷Ç∑ÇÈÇ∑Ç◊ǃÇÃèÓïÒÇÕindexSubTable2Ç…äiî[Ç≥ÇÍÇ‹Ç∑ÅBÉtÉHÅ[É}ÉbÉg6ÇΔÉtÉHÅ[É}ÉbÉg7ÇÕÅAǪÇÃÉrÉbÉgÉ}ÉbÉvÉCÉÅÅ[ÉWÇÃÉAÉâÉCÉìÉÅÉìÉgÇ™àŸÇ»ÇÈÇæÇØÇ≈ÅAóºï˚ÇΔLJÉrÉbÉOÉÅÉgÉäÉNÉXÇÃÉÅÉgÉäÉNÉXèÓïÒÇéùÇøÇ‹Ç∑ÅB

ÅEÇŸÇ«ÇÒÇ«ÇÃÉtÉHÅ[É}ÉbÉgÇ™ÅAbigGlyphMetricsÇ©smallGlyphMetricsÉ^ÉCÉvÇÃÉÅÉgÉäÉNÉXèÓïÒÇéùÇøÇ‹Ç∑ÅBÉrÉbÉOÉÅÉgÉäÉNÉXÇÕÅAâ°èëÇ´ópÇΔècèëÇ´ópÇÃóºï˚ÇÃÉÅÉgÉäÉNÉXèÓïÒÇéùǬDZÇΔÇ™èoóàÇ‹Ç∑Ç™ÅAÉXÉÇÅ[ÉãÉÅÉgÉäÉNÉXÇÕÅAÇ«ÇøÇÁÇ©àÍï˚ÇÃÉÅÉgÉäÉNÉXèÓïÒǵǩéùǬDZÇΔÇ™èoóàÇ‹ÇπÇÒÅB

ÉrÉbÉOÉÅÉgÉäÉNÉXÇÃÉtÉHÅ[É}ÉbÉgÇÕà»â∫ÇÃí ÇËÇ≈Ç∑ÅB

Type Name ê‡ñæ
uint8 height ÉOÉäÉtÉrÉbÉgÉCÉÅÅ[ÉWÇÃècï˚å¸ÇÃÉrÉbÉgêî
uint8 width ÉOÉäÉtÉrÉbÉgÉCÉÅÅ[ÉWÇÃâ°ï˚å¸ÇÃÉrÉbÉgêî
uint8 horiBearingX â°èëÇ´å¥ì_Ç©ÇÁÉrÉbÉgÉ}ÉbÉvÇÃÉåÉtÉgÉGÉbÉWÇ‹Ç≈ÇÃÉsÉNÉZÉãïù
uint8 horiBearingY â°èëÇ´å¥ì_Ç©ÇÁÉrÉbÉgÉ}ÉbÉvÇÃÉgÉbÉvÉGÉbÉWÇ‹Ç≈ÇÃÉsÉNÉZÉãïù
uint8 horiAdvance â°èëÇ´ÇÃÉsÉNÉZÉãÉAÉhÉoÉìÉXïù
uint8 vertBearingX ècèëÇ´å¥ì_Ç©ÇÁÉrÉbÉgÉ}ÉbÉvÇÃÉåÉtÉgÉGÉbÉWÇ‹Ç≈ÇÃÉsÉNÉZÉãïù
uint8 vertBearingY ècèëÇ´å¥ì_Ç©ÇÁÉrÉbÉgÉ}ÉbÉvÇÃÉgÉbÉvÉGÉbÉWÇ‹Ç≈ÇÃÉsÉNÉZÉãïù
uint8 vertAdvance ècèëÇ´ÇÃÉsÉNÉZÉãÉAÉhÉoÉìÉXïù


ÉXÉÇÅ[ÉãÉÅÉgÉäÉNÉXÇÃÉtÉHÅ[É}ÉbÉgÇÕà»â∫ÇÃí ÇËÇ≈Ç∑ÅB

Type Name ê‡ñæ
uint8 height ÉOÉäÉtÉrÉbÉgÉCÉÅÅ[ÉWÇÃècï˚å¸ÇÃÉrÉbÉgêî
uint8 width ÉOÉäÉtÉrÉbÉgÉCÉÅÅ[ÉWÇÃâ°ï˚å¸ÇÃÉrÉbÉgêî
uint8 bearingX â°èëÇ´å¥ì_Ç©ÇÁÉrÉbÉgÉ}ÉbÉvÇÃÉåÉtÉgÉGÉbÉWÇ‹Ç≈ÇÃÉsÉNÉZÉãïù
uint8 bearingY â°èëÇ´å¥ì_Ç©ÇÁÉrÉbÉgÉ}ÉbÉvÇÃÉgÉbÉvÉGÉbÉWÇ‹Ç≈ÇÃÉsÉNÉZÉãïù
uint8 advance â°èëÇ´ÇÃÉsÉNÉZÉãÉAÉhÉoÉìÉXïù


ê}2Ç≈ÇÕÅAäeÉÅÉgÉäÉNÉXèÓïÒÇÃãÔëÃìIÇ»ílÇÅAÉAÉãÉtÉ@ÉxÉbÉgÇÃÅugÅvÇégǡǃê‡ñæÇµÇƒÇ¢Ç‹Ç∑ÅB ÉÅÉgÉäÉNÉXèÓïÒÇÕÅAÇ∑Ç◊ǃêÆêîílÇÇΔÇËÇ‹Ç∑ÅBÇ‹ÇΩÅAvertAdvanceÇÕÅA-yï˚å¸Ç…Ç»ÇËÇ‹Ç∑Ç™ÅADZÇÍÇÕÅAÉ}ÉCÉiÉXÇÃílÇéÊÇËÇ‹ÇπÇÒÅBDZÇÍÇÕÅAãóó£Ç≈džÇËï˚å¸Çä‹Ç‹Ç»Ç¢Ç©ÇÁÇ≈Ç∑ÅBÅiècèëÇ´ÇÕÅAè„Ç©ÇÁâ∫ÇÃÉfÉBÉåÉNÉVÉáÉìÇΔâºíËÇ≥ÇÍǃǢNjÇ∑ÅjsmallGlyphMetricsÇégópÇ∑ÇÈÇΔÇ´Ç…ÇÕÅAÉrÉbÉgÉ}ÉbÉvÉTÉCÉYÉeÅ[ÉuÉãÇÃÉtÉâÉOÇÉZÉbÉgǵǃÅAǪÇÃÉÅÉgÉäÉNÉXÇ™ÅAècèëÇ´ópÇ»ÇÃÇ©â°èëÇ´ópÇ»ÇÃÇ©éwíËÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB

ÅEà»â∫ÇÕÅA'bdat'ÇÃ6ǬÇÃÉtÉHÅ[É}ÉbÉgÇÃè⁄ç◊Ç≈Ç∑ÅB

ÉtÉHÅ[É}ÉbÉg1ÅF

Type Name ê‡ñæ
smallGlyphMetrics smallMetrics ǪÇÃÉOÉäÉtÇÃÉÅÉgÉäÉNÉX
variable /*image data*/ ÉoÉCÉgÉAÉâÉCÉìÇÃÉrÉbÉgÉ}ÉbÉvÉfÅ[É^


ÉtÉHÅ[É}ÉbÉg2ÅF

Type Name ê‡ñæ
smallGlyphMetrics smallMetrics ǪÇÃÉOÉäÉtÇÃÉÅÉgÉäÉNÉX
variable /*image data*/ ÉoÉCÉgÉèÅ[Éhã´äEÇ…ÉpÉfÉBÉìÉOÇ≥ÇÍÇΩÉrÉbÉgÉAÉâÉCÉìÇÃÉrÉbÉgÉ}ÉbÉvÉfÅ[É^


ÉtÉHÅ[É}ÉbÉg4ÅF

Type Name ê‡ñæ
uint32 whiteTreeOffset ÉzÉèÉCÉgÉcÉäÅ[Ç÷ÇÃÉIÉtÉZÉbÉg
uint32 blackTreeOffset ÉuÉâÉbÉNÉcÉäÅ[Ç÷ÇÃÉIÉtÉZÉbÉg
uint32 glyphDataOffset ÉOÉäÉtÉfÅ[É^Ç÷ÇÃÉIÉtÉZÉbÉg
variable /*trees and glyph data*/ Å@


ÉtÉHÅ[É}ÉbÉg5ÅF

Type Name ê‡ñæ
variable /*image data*/ ÉoÉCÉgÉèÅ[Éhã´äEÇ…ÉpÉfÉBÉìÉOÇ≥ÇÍÇΩÉrÉbÉgÉAÉâÉCÉìÇÃÉrÉbÉgÉ}ÉbÉvÉfÅ[É^


ÉtÉHÅ[É}ÉbÉg6ÅF

Type Name ê‡ñæ
bigGlyphMetrics bigMetrics ǪÇÃÉOÉäÉtÇÃÉÅÉgÉäÉNÉX
variable /*image data*/ ÉrÉbÉgÉAÉâÉCÉìÇÃÉrÉbÉgÉ}ÉbÉvÉfÅ[É^


ÉtÉHÅ[É}ÉbÉg7ÅF

Type Name ê‡ñæ
smallGlyphMetrics smallMetrics ǪÇÃÉOÉäÉtÇÃÉÅÉgÉäÉNÉX
variable /*image data*/ ÉrÉbÉgÉAÉâÉCÉìÇÃÉrÉbÉgÉ}ÉbÉvÉfÅ[É^


[Table of Contents]

spacer image
ˇ